/**
 * @file
 * @author Filipe Mutz
 *
 * @section DESCRIPTION
 *
 * @section TODO
 * 1. Fazer a classe VisualReceptiveField poder instanciar imagens coloridas alem dos tons de cinza
 */

#ifndef RECEPTIVE_FIELD_H_
#define RECEPTIVE_FIELD_H_

#include "image.h"
#include "distribution.h"

using namespace std;
using namespace brain::image;
using namespace brain::distribution;

namespace brain
{
	namespace receptive_field
	{
		template<class InputClass, class OutputClass>
		class ReceptiveField
		{
			public:
				ReceptiveField(){}
				virtual ~ReceptiveField(){}
				virtual OutputClass generate_neuron_input(InputClass) = 0;
		};

		class VisualReceptiveField: ReceptiveField<pair<GrayscaleImage*, vector<Point>*>, vector<int> >
		{
			int compare_pixels(GrayscaleImage *img, Point &point, Gray &gray);

			public:
				VisualReceptiveField();
				~VisualReceptiveField();

				vector<int> generate_neuron_input(pair<GrayscaleImage*, vector<Point>*> stimulus);
		};
	}
}

#endif
